home *** CD-ROM | disk | FTP | other *** search
- title CKKEYWD
- .model MEDIUM,BASIC
- .data
-
- ;
- ; Basic KeyWord Table
- ;
- wrdtbl db "/$DYNAMIC", "/$INCLUDE", "/$STATIC"
- db "/ABS", "/ACCESS", "/ALIAS", "/AND", "/ANY"
- db "/APPEND", "/AS", "/ASC", "/ATN", "/BASE"
- db "/BEEP", "/BINARY", "/BLOAD", "/BSAVE", "/BYVAL"
- db "/CALL", "/CALLS", "/CASE"
- db "/CDBL", "/CDECL", "/CHAIN", "/CHDIR", "/CHR$"
- db "/CINT", "/CIRCLE", "/CLEAR", "/CLNG", "/CLOSE"
- db "/CLS", "/COLOR", "/COM", "/COMMAND$", "/COMMON"
- db "/CONST", "/COS", "/CSNG", "/CSRLIN", "/CVD"
- db "/CVDMBF", "/CVI", "/CVL", "/CVS", "/CVSMBF"
- db "/DATA", "/DATE$", "/DECLARE"
- db "/DEFDBL", "/DEFINT", "/DEFLNG", "/DEFSNG", "/DEFSTR"
- db "/DIM", "/DO", "/DOUBLE", "/DRAW", "/ELSE"
- db "/ELSEIF", "/END"
- db "/ENVIRON", "/ENVIRON$"
- db "/EOF", "/EQV", "/ERASE", "/ERDEV", "/ERDEV$"
- db "/ERL", "/ERR", "/ERROR", "/EXIT", "/EXP"
- db "/FIELD", "/FILEATTR", "/FILES", "/FIX", "/FOR"
- db "/FRE", "/FREEFILE", "/FUNCTION", "/GET", "/GOSUB"
- db "/GOTO", "/HEX$", "/IF", "/IMP", "/INKEY$", "/INP"
- db "/INPUT", "/INPUT$", "/INSTR", "/INT"
- db "/INTEGER", "/IOCTL", "/IOCTL$", "/IS", "/KEY"
- db "/KILL", "/LBOUND", "/LCASE$", "/LEFT$", "/LEN"
- db "/LET", "/LINE", "/LINE INPUT", "/LIST", "/LOC"
- db "/LOCAL", "/LOCATE", "/LOCK", "/LOF", "/LOG"
- db "/LONG", "/LOOP", "/LPOS", "/LPRINT", "/LSET"
- db "/LTRIM$", "/MID$", "/MKD$", "/MKDIR", "/MKDMBF$"
- db "/MKI$", "/MKL$", "/MKS$", "/MKSMBF$", "/MOD"
- db "/NAME", "/NEXT", "/NOT", "/OCT$", "/OFF", "/ON"
- db "/OPEN", "/OR", "/OUT"
- db "/OUTPUT", "/PAINT", "/PALETTE", "/PCOPY", "/PEEK"
- db "/PEN", "/PLAY", "/PMAP", "/POINT", "/POKE"
- db "/POS", "/PRESET", "/PRINT", "/PSET"
- db "/PUT", "/RANDOM", "/RANDOMIZE", "/READ", "/REDIM"
- db "/REM", "/RESET", "/RESTORE", "/RESUME", "/RETURN"
- db "/RIGHT$", "/RMDIR", "/RND", "/RSET", "/RTRIM$"
- db "/RUN", "/SADD", "/SCREEN", "/SEEK", "/SEG"
- db "/SETMEM", "/SGN", "/SHARED", "/SHELL", "/SIGNAL"
- db "/SIN", "/SINGLE", "/SLEEP", "/SOUND", "/SPACE$"
- db "/SPC", "/SQR", "/STATIC", "/STEP", "/STICK"
- db "/STOP", "/STR$", "/STRIG", "/STRING", "/STRING$"
- db "/SUB", "/SWAP", "/SYSTEM", "/TAB", "/TAN"
- db "/THEN", "/TIME$", "/TIME$", "/TIMER", "/TO"
- db "/TROFF", "/TRON", "/TYPE", "/UBOUND", "/UCASE$"
- db "/UEVENT", "/UNLOCK", "/USING", "/UNTIL", "/VAL", "/VARPTR"
- db "/VARPTR$", "/VARSEG", "/VIEW", "/WAIT", "/WEND"
- db "/WHILE", "/WIDTH", "/WINDOW", "/WRITE"
- db "/XOR", "/"
- wrdend equ $ ; end of keyword table
- wrdln equ $ - wrdtbl ; Length of keywords
- .code
-
- CKKEYWD proc strptr:word
- mov ax,@data ; setup address of table
- mov es,ax ; in es:di
- mov di,OFFSET wrdtbl
- mov cx,wrdln ; length of keyword table
- mov bx,strptr ; pointer string struct
- scan: mov al,"/" ; scan for slash
- cld
- repne scasb ; search for match
- jcxz notfound ; not in table
- mov dx,di ; save table offset
- mov al,BYTE PTR es:[di] ; 1st char after "/"
- mov si,[bx+2] ; point to string
- cmp al,BYTE PTR [si+1] ; ck 1st char after "/"
- jg notfound ; not a possible match
- jl @F ; get next element
- dec di ; 1st char in words
- mov cx,[bx] ; lenght of source string
- repe cmpsb ; test for a match
- jcxz found ; have a match
- @@: mov di,dx ; restore table offset
- mov cx,OFFSET wrdend ; calculate length left
- sub cx,di ; end - current
- jg scan ; scan again if > 0
- notfound:
- xor ax,ax ; clear ax reg
- jmp SHORT exit ; go exit
- found: mov ax,0FFFFH ; return -1
- exit: ret
- CKKEYWD endp
- end
-